package com.hhxy.rabbitmq.demo02;

import com.hhxy.rabbitmq.utils.RabbitMqUtil;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;

/**
 * @author ghp
 * @date 2023/2/22
 * @title 消费者
 * @description
 */
public class Consumer03 {

    // 队列名称
    public static final String QUEUE_NAME = "hello";

    // 接收消息
    public static void main(String[] args) throws Exception {
        // 4、获取信道
        Channel channel = RabbitMqUtil.getChannel();

        System.out.println("Consumer03等待接收消息...");

        // 5、接收消息
        /*
            1. 指定消费哪一个队列中的消息
            2. 消息接收成功后是否自动应答，true表示自动应答，false表示手动应答
            3. 消息接收成功时的回调
            4. 取消消息接收时的回调（可以理解为消息接收失败时的回调）
         */
        DeliverCallback deliverCallback = (consumerTag, message) -> {
            // 消息成功消费后执行的逻辑（每成功消费一条消息都会执行一次这段逻辑）
            System.out.println("消息消费成功 "+new String(message.getBody()));
        };
        CancelCallback cancelCallback = (consumerTag) -> {
            // 消息消费中断后执行的逻辑（每中断消费一条消息都会执行一次这段逻辑）
            System.out.println("消息消费中断");
        };
        channel.basicConsume(QUEUE_NAME, true, deliverCallback, cancelCallback);
    }
}
